// pages/member/member.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 用户信息
    userInfo: null,
    hasUserInfo: false,
    canIUseGetUserProfile: false,
    // 临时存储登录过程中的信息
    tempUserInfo: {
      avatarUrl: '',
      nickName: ''
    },
    // 会员信息
    memberInfo: {
      level: '普通会员',
      points: 236,
      nextLevel: '黄金会员',
      nextLevelPoints: 500,
      progress: 47.2, // 进度百分比
      balance: 52.8,  // 账户余额
    },
    // 优惠券
    coupons: [
      { id: 1, name: '满30减5券', condition: '满30元可用', amount: 5, startDate: '2023-09-01', endDate: '2023-12-31', used: false, expired: false },
      { id: 2, name: '满50减10券', condition: '满50元可用', amount: 10, startDate: '2023-09-01', endDate: '2023-12-31', used: false, expired: false },
      { id: 3, name: '免费升级券', condition: '任意饮品', amount: 0, startDate: '2023-08-15', endDate: '2023-10-15', used: false, expired: true }
    ],
    // 添加一个计算属性，标记是否有可用优惠券
    hasAvailableCoupons: false,
    // 订单统计
    orderStats: {
      pendingPayment: 0,
      pendingPickup: 0,
      completed: 0,
      total: 0
    },
    // 会员权益
    benefits: [
      { id: 1, name: '生日特权', icon: '/images/icons/gift.png', desc: '生日当天获赠大杯饮品' },
      { id: 2, name: '积分加倍', icon: '/images/icons/points.png', desc: '消费积分双倍累计' },
      { id: 3, name: '专属优惠', icon: '/images/icons/discount.png', desc: '每月专属优惠券' },
      { id: 4, name: '免费配送', icon: '/images/icons/delivery.png', desc: '单笔满50元免配送费' }
    ],
    // 功能菜单
    functionMenus: [
      { id: 'address', name: '收货地址', icon: '/images/icons/address.png' },
      { id: 'editProfile', name: '修改用户资料', icon: '/images/icons/edit.png' },
      { id: 'service', name: '联系客服', icon: '/images/icons/service.png' },
      { id: 'about', name: '关于我们', icon: '/images/icons/about.png' },
      { id: 'feedback', name: '意见反馈', icon: '/images/icons/feedback.png' },
      { id: 'logout', name: '退出登录', icon: '/images/icons/logout.png' }
    ],
    // 显示退出登录选项
    showLogout: false
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 检查是否支持getUserProfile
    if (wx.getUserProfile) {
      this.setData({
        canIUseGetUserProfile: true
      });
    }

    // 检查是否支持新版用户头像昵称填写能力
    if (wx.canIUse('button.open-type.chooseAvatar')) {
      console.log('支持使用新版获取用户头像接口');
    } else {
      console.log('不支持使用新版获取用户头像接口，建议升级基础库版本');
    }

    // 一次性加载所有初始数据，减少多次setData
    this.initPageData();

    // 计算是否有可用优惠券
    this.checkAvailableCoupons();
  },

  /**
   * 初始化页面数据
   */
  initPageData() {
    // 尝试从缓存获取用户信息
    const userInfo = wx.getStorageSync('userInfo');
    // 从缓存获取历史订单
    const historyOrders = wx.getStorageSync('historyOrders') || [];

    // 统计各状态订单数量
    let pendingPayment = 0;
    let pendingPickup = 0;
    let completed = 0;

    historyOrders.forEach(order => {
      if (order.status === 'pending') {
        pendingPayment++;
      } else if (order.status === 'paid') {
        pendingPickup++;
      } else if (order.status === 'completed') {
        completed++;
      }
    });

    // 一次性更新所有数据，减少setData调用次数
    const updateData = {
      'orderStats.pendingPayment': pendingPayment,
      'orderStats.pendingPickup': pendingPickup,
      'orderStats.completed': completed,
      'orderStats.total': historyOrders.length
    };

    if (userInfo) {
      updateData.userInfo = userInfo;
      updateData.hasUserInfo = true;
    }

    this.setData(updateData);
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    // 页面显示时只更新订单统计
    this.updateOrderStats();
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 获取用户信息
   */
  getUserProfile() {
    wx.getUserProfile({
      desc: '用于完善会员资料',
      success: (res) => {
        wx.showLoading({
          title: '登录中...',
          mask: true
        });

        // 获取本地购物车数据用于同步
        const cartItems = wx.getStorageSync('cartList') || [];

        // 调用云函数登录
        wx.cloud.callFunction({
          name: 'login',
          data: {
            userInfo: res.userInfo,
            cartItems: cartItems,
            // 标记为不强制更新用户资料，保留之前的自定义昵称
            forceUpdateProfile: false
          }
        })
          .then(result => {
            wx.hideLoading();
            console.log('登录成功:', result);

            if (result.result && result.result.success) {
              // 获取云端返回的用户数据
              const userData = result.result.userData;

              // 构建本地用户信息，优先使用服务器返回的数据
              const userInfo = {
                // 使用服务器返回的昵称，而不是微信返回的昵称
                nickName: userData.nickname || res.userInfo.nickName,
                avatarUrl: userData.avatarUrl || res.userInfo.avatarUrl,
                gender: userData.gender || res.userInfo.gender
              };

              console.log('登录时使用昵称:', userInfo.nickName);

              // 保存用户信息到缓存
              wx.setStorageSync('userInfo', userInfo);

              // 保存用户ID等信息
              wx.setStorageSync('userId', result.result.userData._id);
              wx.setStorageSync('openid', result.result.openid);

              // 更新用户信息显示
              this.setData({
                userInfo: userInfo,
                hasUserInfo: true
              });

              // 获取最新会员信息
              this.getMemberInfo(result.result.userData);

              wx.showToast({
                title: '登录成功',
                icon: 'success'
              });
            } else {
              wx.showToast({
                title: '登录失败',
                icon: 'none'
              });
            }
          })
          .catch(err => {
            wx.hideLoading();
            console.error('登录失败:', err);

            wx.showToast({
              title: '登录失败，请重试',
              icon: 'none'
            });
          });
      },
      fail: (err) => {
        if (err.errMsg !== 'getUserProfile:fail auth deny') {
          wx.showToast({
            title: '获取用户信息失败',
            icon: 'none'
          });
        }
      }
    });
  },

  /**
   * 获取会员信息
   */
  getMemberInfo(userData) {
    if (userData) {
      // 使用云端返回的用户数据
      const memberInfo = {
        level: userData.level || '普通会员',
        points: userData.points || 0,
        nextLevel: userData.level === '普通会员' ? '黄金会员' : '钻石会员',
        nextLevelPoints: userData.level === '普通会员' ? 500 : 1000,
        progress: userData.points / (userData.level === '普通会员' ? 500 : 1000) * 100,
        balance: userData.balance || 0
      };

      this.setData({ memberInfo });
      return;
    }

    // 如果没有userData，尝试从云端获取
    const openid = wx.getStorageSync('openid');
    if (openid) {
      // 如果有openid，说明已登录，从服务器获取最新会员信息
      wx.cloud.callFunction({
        name: 'getUserInfo',
        data: { openid }
      })
        .then(res => {
          if (res.result && res.result.success) {
            const userData = res.result.userData;
            const memberInfo = {
              level: userData.level || '普通会员',
              points: userData.points || 0,
              nextLevel: userData.level === '普通会员' ? '黄金会员' : '钻石会员',
              nextLevelPoints: userData.level === '普通会员' ? 500 : 1000,
              progress: userData.points / (userData.level === '普通会员' ? 500 : 1000) * 100,
              balance: userData.balance || 0
            };

            this.setData({ memberInfo });
          }
        })
        .catch(err => {
          console.error('获取会员信息失败:', err);
        });
    } else {
      // 未登录或无法获取，使用默认数据
      const memberInfo = this.data.memberInfo;
      this.setData({ memberInfo });
    }
  },

  /**
   * 更新订单统计
   */
  updateOrderStats() {
    // 从缓存获取历史订单
    const historyOrders = wx.getStorageSync('historyOrders') || [];

    if (historyOrders.length === 0 && this.data.orderStats.total === 0) {
      // 如果没有订单且状态已经是零，就不需要更新
      return;
    }

    // 统计各状态订单数量
    let pendingPayment = 0;
    let pendingPickup = 0;
    let completed = 0;

    historyOrders.forEach(order => {
      if (order.status === 'pending') {
        pendingPayment++;
      } else if (order.status === 'paid') {
        pendingPickup++;
      } else if (order.status === 'completed') {
        completed++;
      }
    });

    // 检查是否有变化，只在有变化时更新
    if (pendingPayment !== this.data.orderStats.pendingPayment ||
      pendingPickup !== this.data.orderStats.pendingPickup ||
      completed !== this.data.orderStats.completed ||
      historyOrders.length !== this.data.orderStats.total) {

      this.setData({
        'orderStats.pendingPayment': pendingPayment,
        'orderStats.pendingPickup': pendingPickup,
        'orderStats.completed': completed,
        'orderStats.total': historyOrders.length
      });
    }
  },

  /**
   * 跳转到优惠券页面
   */
  toCoupons() {
    wx.showToast({
      title: '优惠券功能开发中',
      icon: 'none'
    });
  },

  /**
   * 跳转到积分详情页面
   */
  toPointsDetail() {
    wx.showToast({
      title: '积分详情功能开发中',
      icon: 'none'
    });
  },

  /**
   * 跳转到钱包/余额页面
   */
  toWallet() {
    wx.showToast({
      title: '钱包功能开发中',
      icon: 'none'
    });
  },

  /**
   * 跳转到订单列表页面
   */
  toOrderList(e) {
    const status = e.currentTarget.dataset.status || 'all';
    wx.navigateTo({
      url: `/pages/orderList/orderList?tab=${status}`
    });
  },

  /**
   * 功能菜单跳转
   */
  handleMenuTap(e) {
    const menuId = e.currentTarget.dataset.id;

    switch (menuId) {
      case 'address':
        this.chooseAddress();
        break;
      case 'editProfile':
        this.editUserProfile();
        break;
      case 'service':
        this.contactService();
        break;
      case 'about':
        this.showAboutInfo();
        break;
      case 'feedback':
        wx.showToast({
          title: '反馈功能开发中',
          icon: 'none'
        });
        break;
      case 'logout':
        this.logout();
        break;
      default:
        break;
    }
  },

  /**
   * 选择收货地址
   */
  chooseAddress() {
    wx.chooseAddress({
      success: (res) => {
        // 保存收货地址到缓存
        wx.setStorageSync('addressInfo', res);
        wx.showToast({
          title: '地址已保存',
          icon: 'success'
        });
      },
      fail: (err) => {
        if (err.errMsg !== 'chooseAddress:fail cancel') {
          wx.showToast({
            title: '获取地址失败',
            icon: 'none'
          });
        }
      }
    });
  },

  /**
   * 联系客服
   */
  contactService() {
    // 复制客服微信号
    wx.setClipboardData({
      data: 'milk_tea_service',
      success: () => {
        wx.showToast({
          title: '客服微信号已复制',
          icon: 'success'
        });
      }
    });
  },

  /**
   * 显示关于我们信息
   */
  showAboutInfo() {
    wx.showModal({
      title: '关于我们',
      content: '我们是一家专注于提供高品质奶茶的连锁店，致力于为顾客提供美味、健康的饮品选择。',
      showCancel: false
    });
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    // 刷新所有数据
    this.initPageData();

    setTimeout(() => {
      wx.stopPullDownRefresh();
    }, 800);
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    // 不需要处理
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: '奶茶点单 - 会员专享优惠',
      path: '/pages/index/index'
    };
  },

  /**
   * 检查是否有可用优惠券
   */
  checkAvailableCoupons() {
    const { coupons } = this.data;
    let hasAvailable = false;

    if (coupons && coupons.length > 0) {
      for (let i = 0; i < coupons.length; i++) {
        if (!coupons[i].expired && !coupons[i].used) {
          hasAvailable = true;
          break;
        }
      }
    }

    this.setData({ hasAvailableCoupons: hasAvailable });
  },

  /**
   * 编辑用户资料
   */
  editUserProfile() {
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }

    wx.showModal({
      title: '修改用户资料',
      editable: true,
      placeholderText: this.data.userInfo.nickName,
      success: (res) => {
        if (res.confirm) {
          const newNickname = res.content.trim();
          if (newNickname.length === 0) {
            wx.showToast({
              title: '用户名不能为空',
              icon: 'none'
            });
            return;
          }

          // 更新用户名
          this.updateUserNickname(newNickname);
        }
      }
    });
  },

  /**
   * 更新用户昵称
   */
  updateUserNickname(newNickname) {
    wx.showLoading({
      title: '更新中...',
      mask: true
    });

    // 获取当前用户ID
    const userId = wx.getStorageSync('userId');
    if (!userId) {
      wx.hideLoading();
      wx.showToast({
        title: '用户未登录',
        icon: 'none'
      });
      return;
    }

    console.log('更新用户昵称:', newNickname);

    // 调用云函数更新用户资料
    wx.cloud.callFunction({
      name: 'login',
      data: {
        userInfo: {
          // 使用nickname字段，与后端字段保持一致
          nickname: newNickname
        },
        // 强制更新
        forceUpdateProfile: true
      }
    })
      .then(res => {
        wx.hideLoading();
        console.log('用户资料更新结果:', res);

        if (res.result && res.result.success) {
          // 获取当前用户信息并更新
          const userInfo = wx.getStorageSync('userInfo') || {};
          userInfo.nickName = newNickname;

          // 更新本地缓存
          wx.setStorageSync('userInfo', userInfo);

          // 更新页面显示
          this.setData({
            userInfo: userInfo
          });

          wx.showToast({
            title: '更新成功',
            icon: 'success'
          });
        } else {
          wx.showToast({
            title: '更新失败',
            icon: 'none'
          });
        }
      })
      .catch(err => {
        wx.hideLoading();
        console.error('更新用户资料失败:', err);
        wx.showToast({
          title: '更新失败，请重试',
          icon: 'none'
        });
      });
  },

  /**
   * 退出登录
   */
  logout() {
    if (!this.data.hasUserInfo) {
      wx.showToast({
        title: '请先登录',
        icon: 'none'
      });
      return;
    }

    wx.showModal({
      title: '提示',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除用户信息
          wx.removeStorageSync('userInfo');
          wx.removeStorageSync('openid');
          wx.removeStorageSync('userId');

          // 更新页面显示
          this.setData({
            userInfo: null,
            hasUserInfo: false,
            showLogout: false,
            memberInfo: {
              level: '普通会员',
              points: 0,
              nextLevel: '黄金会员',
              nextLevelPoints: 500,
              progress: 0,
              balance: 0
            }
          });

          // 重新初始化数据
          this.initPageData();

          wx.showToast({
            title: '已退出登录',
            icon: 'success'
          });
        }
      }
    });
  },

  /**
   * 处理用户选择头像事件
   */
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail;
    console.log('用户选择的头像URL:', avatarUrl);

    // 更新临时用户信息中的头像
    this.setData({
      'tempUserInfo.avatarUrl': avatarUrl
    });

    wx.showToast({
      title: '头像已选择',
      icon: 'success'
    });
  },

  /**
   * 处理用户输入昵称事件
   */
  onInputNickname(e) {
    const nickName = e.detail.value;
    console.log('用户输入的昵称:', nickName);

    // 更新临时用户信息中的昵称
    this.setData({
      'tempUserInfo.nickName': nickName
    });
  },

  /**
   * 确认登录处理
   */
  confirmLogin() {
    const { tempUserInfo } = this.data;

    // 验证头像和昵称是否已填写
    if (!tempUserInfo.avatarUrl) {
      wx.showToast({
        title: '请选择头像',
        icon: 'none'
      });
      return;
    }

    if (!tempUserInfo.nickName || tempUserInfo.nickName.trim() === '') {
      wx.showToast({
        title: '请输入昵称',
        icon: 'none'
      });
      return;
    }

    wx.showLoading({
      title: '登录中...',
      mask: true
    });

    // 先调用wx.login获取临时登录凭证code
    wx.login({
      success: (loginRes) => {
        if (loginRes.code) {
          console.log('获取到登录code:', loginRes.code);

          // 获取本地购物车数据用于同步
          const cartItems = wx.getStorageSync('cartList') || [];

          // 调用云函数登录，传入用户信息、购物车数据和登录code
          wx.cloud.callFunction({
            name: 'login',
            data: {
              userInfo: {
                nickName: tempUserInfo.nickName,
                avatarUrl: tempUserInfo.avatarUrl
              },
              cartItems: cartItems,
              code: loginRes.code,
              forceUpdateProfile: true  // 强制更新资料
            }
          })
            .then(result => {
              wx.hideLoading();
              console.log('登录成功:', result);

              if (result.result && result.result.success) {
                // 获取云端返回的用户数据
                const userData = result.result.userData;

                // 构建本地用户信息
                const userInfo = {
                  nickName: tempUserInfo.nickName,
                  avatarUrl: tempUserInfo.avatarUrl,
                  gender: userData.gender || 0
                };

                console.log('登录时使用昵称:', userInfo.nickName);

                // 保存用户信息到缓存
                wx.setStorageSync('userInfo', userInfo);

                // 保存用户ID等信息
                wx.setStorageSync('userId', result.result.userData._id);
                wx.setStorageSync('openid', result.result.openid);

                // 更新用户信息显示
                this.setData({
                  userInfo: userInfo,
                  hasUserInfo: true,
                  tempUserInfo: {
                    avatarUrl: '',
                    nickName: ''
                  }
                });

                // 获取最新会员信息
                this.getMemberInfo(result.result.userData);

                wx.showToast({
                  title: '登录成功',
                  icon: 'success'
                });
              } else {
                wx.showToast({
                  title: '登录失败',
                  icon: 'none'
                });
              }
            })
            .catch(err => {
              wx.hideLoading();
              console.error('登录失败:', err);

              wx.showToast({
                title: '登录失败，请重试',
                icon: 'none'
              });
            });
        } else {
          wx.hideLoading();
          console.error('获取登录凭证失败');
          wx.showToast({
            title: '获取登录凭证失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('微信登录失败:', err);
        wx.showToast({
          title: '微信登录失败',
          icon: 'none'
        });
      }
    });
  },
})